package com.vote.utils;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import com.vote.model.Option;
import com.vote.model.Question;
import com.vote.model.Questionnaire;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class JSONTransform {

    public static Questionnaire JSON2Model(JSONObject jo){
        JSONArray qArray = jo.getJSONArray("questionList");
        List<Question> qlist = new ArrayList<Question>();
        for(int i = 0; i < qArray.size(); i++){
            JSONObject qjo = (JSONObject) qArray.get(i);
            JSONArray oArray = qjo.getJSONArray("optionList");
            List<Option> olist = new ArrayList<Option>();
            for(int j = 0; j < oArray.size(); j++){
                JSONObject ojo = (JSONObject) oArray.get(j);
                Option o = (Option)JSONObject.toBean(ojo, Option.class);
                olist.add(o);
            }
            Question q = (Question)JSONObject.toBean(qjo, Question.class);
            q.setOptionList(olist);
            qlist.add(q);
        }
        Questionnaire questionnaire = (Questionnaire) JSONObject.toBean(jo, Questionnaire.class);
        questionnaire.setQuestionList(qlist);
        questionnaire.setQuestionnaireTime(new Timestamp(System.currentTimeMillis()));
        return questionnaire;
    }
    
    public static JSONObject Model2JSON(Questionnaire q){
        JSONObject json = new JSONObject();
        json.put("questionnaireName", q.getQuestionnaireName());
        json.put("questionnaireDescription", q.getQuestionnaireDescription());
        json.put("questionnaireType", q.getQuestionnaireType());
        json.put("questionnaireGroup", q.getQuestionnaireGroup());
        List<Question> qlist = q.getQuestionList();
        JSONArray qja = new JSONArray();
        for(int i = 0 ; i < qlist.size(); i++){
            JSONObject qjo = new JSONObject();
            qjo.put("questionTitle", qlist.get(i).getQuestionTitle());
            qjo.put("questionType", qlist.get(i).getQuestionType());
            List<Option> olist = qlist.get(i).getOptionList();
            JSONArray oja = new JSONArray();
            for(int j = 0; j < olist.size(); j++){
                JSONObject ojo = new JSONObject();
                ojo.put("optionText", olist.get(j).getOptionText());
                oja.add(ojo);
            }
            qjo.put("optionList", oja);
            qja.add(qjo);
        }
        json.put("questionList", qja);
        return json;
    }
}
